A primeira função que utilizaremos,
carregar_dados_brutos_xlsx(), irá carregar a planilha de
dados do SMART em formato excel. Essa função carrega um arquivo do tipo
.xlsx e gerar automaticamente o arquivo backup nomeado como
dados_brutos_SMART.rds na pasta data-raw. A
função seguinte a ser utilizada,
gerar_dados_completos_SMART() que irá carregar o arquivo
dados_brutos_SMART.rds. Essa função foi escrita para
carrega os dados e operar uma série de transformações para devolvê-lo
mais próximo ao necessário para conduzir as análises. Como exemplo,
utilizaremos o arquivo monitora_masto_aves_SMART.xlsx.
Antes de começar o carregamento dos dados é necessário carregar as
funções necessárias utilizando o comando source().
# carregar as funções necessárias
source(here::here("R/carregar_dados_brutos_xlsx.R"))
source(here::here("R/gerar_dados_completos_SMART.R"))
Para carregar a nova base de dados, é importante que ela esteja salva
na pasta data-raw do projeto Monitora. Para isso, basta
manter a estrutura de pastas do projeto (veja o README do repositório).
No corpo da função, deve ser informado o caminho para o arquivo (ex.
nome da pasta, data-raw, e o nome do arquivo,
monitora_masto_aves_2023_04_04.xlsx).
# carregar a base de dados do Monitora
dados_brutos_SMART <- carregar_dados_brutos_xlsx(
dados = "data-raw/monitora_masto_aves_SMART.xlsx",
sheet = 3 # indica a aba com a planilha a ser carregada
)
head(dados_brutos_SMART)
dplyr::glimpse(dados_brutos_SMART)
Rows: 53
Columns: 34
$ `CDUC (código da unidade de conservação)` <lgl> …
$ `Local - Nome da Unidade de Conservação` <chr> …
$ `Número da Estação Amostral` <dbl> …
$ `Nome da EA` <lgl> …
$ `Esforço de amostragem tamanho da trilha (m)` <dbl> …
$ `data de início da amostragem` <dttm> …
$ `data de término da amostragem` <dttm> …
$ `Ano da amostragem` <dbl> …
$ `Estação do ano` <lgl> …
$ `Horário de início` <dttm> …
$ `Horário de término` <dttm> …
$ `Tempo de censo` <dttm> …
$ `Velocidade (km/h)` <dbl> …
$ `Condição Climática/Tempo` <chr> …
$ `ID Observadores` <chr> …
$ `ID líder` <dbl> …
$ `Nome dos observadores` <chr> …
$ `Nome do líder` <chr> …
$ `ID observação` <chr> …
$ `Número do animal no guia` <dbl> …
$ classe <lgl> …
$ ordem <lgl> …
$ familia <lgl> …
$ gênero <chr> …
$ especie <chr> …
$ `nome popular` <chr> …
$ `O que foi identificado` <chr> …
$ `Nº animais encontrados` <chr> …
$ `tinha mais?` <chr> …
$ `distância da trilha (metros)` <chr> …
$ `Número da próxima plaqueta` <chr> …
$ `Problema na amostragem?` <chr> …
$ Longitude <dbl> …
$ Latitude <dbl> …
Em seguida, usamos a função
gerar_dados_completos_SMART().
# gerar dados completos
dados_completos_SMART <- gerar_dados_completos_SMART(dados_brutos_SMART)
head(dados_completos_SMART)
dplyr::glimpse(dados_completos_SMART)
Rows: 53
Columns: 20
$ nome_ea <lgl> NA, NA, NA, NA, NA, NA, N…
$ n_visitas_repetidas <int> 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ codigo_uc <lgl> NA, NA, NA, NA, NA, NA, N…
$ categoria_uc <fct> rds, rds, rds, rds, rds, …
$ nome_uc <fct> rds_uatuma, rds_uatuma, r…
$ nome_uc_abv <fct> noth, pene_supe, cryp, sa…
$ numero_ea <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ data_amostragem <dttm> 2023-06-14, 2023-06-14, …
$ estacao <lgl> NA, NA, NA, NA, NA, NA, N…
$ ano <dbl> 2023, 2023, 2023, 2023, 2…
$ esforco_dia <dbl> 4396, 4396, 4396, 4396, 4…
$ esforco_total <dbl> 4396, 4396, 4396, 4396, 4…
$ nome_sp <fct> nothocrax, penelope_super…
$ nome_sp_abv <fct> noth, pene_supe, cryp, sa…
$ validacao <fct> especie, especie, genero,…
$ distancia <dbl> 1.2, 2.6, 6.1, 2.1, 6.4, …
$ tamanho_grupo <dbl> 1, 1, 2, 4, 1, 1, 2, 1, 2…
$ velocidade_km_h <dbl> 24381.46, 24381.46, 24381…
$ tempo_censo <drtn> 4.327222 hours, 4.327222…
$ numero_observadores <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4…
Para garantir a reprodutibilidade dos códigos produzidos em versões
atualizadas da base de dados do Monitora, é importante tomar alguns
cuidados. O primeiro e mais importante cuidado é manter a
consistência dos nomes, da ordem e do número de colunas em
versões atualizadas da base de dados do Monitora. Além de carregar os
dados, a função carregar_dados_completos() aplica uma série
de transformações nas colunas. Seus nomes são alterados, e a essas são
atribuídos tipos apropriados (data, caracter, fator, inteiro e
numérico), linhas são eliminadas e novas colunas são geradas. Qualquer
alteração no número de colunas, nos seus nomes ou na sua ordem levará a
um mal funcionamento da função de transformação dos dados.
Outros aspectos importantes incluem:
a presença de dados ausentes (NAs) são
automaticamente substituidas pelo valor correto apenas nas colunas
nome_ea, esforco_dia e
tempo_senso;
novos dados devem ser adicionados a planilha de dados utilizada como modelo no presente documento (idêntico ao modelo do mointora);
se novas Unidades de Conservação para além das 41 presentes nessa planilha forem adicionadas, a função pode deixar de funcionar. Nesse caso, entre em contato com os desenvolvedores via e-mail: vntborgesjr@gmail.com;
os nomes dos observadores devem ser separados por ” e “,” E “,”/“,”;“, ou” a “. Note que, quando presentes, os espaços são importantes e devem ser aplicados para separação dos nomes;
na coluna validacao (coluna “O que foi identificado”
na planilha original) espécie deve ser identificado como “E”, “e”, ou
“espécie”; gênero deve ser identificado como “G”, “g”, ou “gênero”;
família deve ser identificada como “F”; e ordem deve ser identificada
como “O”;
deve ser utilizado ponto como separador decimal (ao em vez de vírgula).
A partir de agora os dados estão prontos para serem explorados, ou
mesmo filtrados e transformados para o formato do pacote
Distance para análise de densidade. Por exemplo, filtrar os
dados para a UC cujos os dados foram introduzidos a partir do SMART:
# carregar função de filtragem dos dados
source(here::here("R/filtrar_dados.R"))
# filtrar dados por Unidade de Conservação e por espécie
dados_filtrados_SMART <- filtrar_dados(
dados = dados_completos_SMART,
nome_ucs = "rds_uatuma"
)
head(dados_filtrados_SMART)
str(dados_filtrados_SMART)
tibble [53 × 20] (S3: tbl_df/tbl/data.frame)
$ nome_ea : logi [1:53] NA NA NA NA NA NA ...
$ n_visitas_repetidas: int [1:53] 1 1 1 1 1 1 1 1 1 1 ...
$ codigo_uc : logi [1:53] NA NA NA NA NA NA ...
$ categoria_uc : Factor w/ 1 level "rds": 1 1 1 1 1 1 1 1 1 1 ...
$ nome_uc : Factor w/ 1 level "rds_uatuma": 1 1 1 1 1 1 1 1 1 1 ...
$ nome_uc_abv : Factor w/ 11 levels "call_vier","chir_ssat",..: 7 9 4 10 5 6 11 3 1 2 ...
$ numero_ea : num [1:53] 1 1 1 1 1 1 1 1 1 1 ...
$ data_amostragem : POSIXct[1:53], format: "2023-06-14" ...
$ estacao : logi [1:53] NA NA NA NA NA NA ...
$ ano : num [1:53] 2023 2023 2023 2023 2023 ...
$ esforco_dia : num [1:53] 4396 4396 4396 4396 4396 ...
$ esforco_total : num [1:53] 4396 4396 4396 4396 4396 ...
$ nome_sp : Factor w/ 11 levels "callicebus_vierai",..: 7 9 4 10 5 6 11 3 1 2 ...
$ nome_sp_abv : Factor w/ 11 levels "call_vier","chir_ssat",..: 7 9 4 10 5 6 11 3 1 2 ...
$ validacao : Factor w/ 2 levels "especie","genero": 1 1 2 2 1 2 1 1 1 1 ...
$ distancia : num [1:53] 1.2 2.6 6.1 2.1 6.4 0 4 8 0 3 ...
$ tamanho_grupo : num [1:53] 1 1 2 4 1 1 2 1 2 4 ...
$ velocidade_km_h : num [1:53] 24381 24381 24381 24381 24381 ...
$ tempo_censo : 'difftime' num [1:53] 4.32722222222222 4.32722222222222 4.32722222222222 4.32722222222222 ...
..- attr(*, "units")= chr "hours"
$ numero_observadores: num [1:53] 4 4 4 4 4 4 4 4 4 4 ...
Agora, podemos contar o número de observações validadas:
# carregar a função de contagem das observações validadas
source(here::here("R/contar_n_obs_validadas.R"))
# contar observações validadas ao nível de espécie
n_obs_validadas <- contar_n_obs_validadas(dados_filtrados_SMART)
n_obs_validadas
Vamos selecionar uma espécie da RDS Uatumã para então transformar os
dados para o formato de análise do pacote Distance.
Primeiro vamos avaliar qual foi a espécie mais abundante:
# carregar a função para contar número de observações por espécie e plotar os dados
source(here::here("R/contar_n_obs_sp.R"))
source(here::here("R/plotar_n_obs_sp_interativo.R"))
# contar o número de observações por espécie
n_obs_sp <- contar_n_obs_sp(dados_filtrados_SMART)
n_obs_sp
# plotar o número de observações por espécie
plotar_n_obs_sp_interativo(n_obs_sp)
Registered S3 method overwritten by 'data.table':
method from
print.data.table
Registered S3 method overwritten by 'htmlwidgets':
method from
print.htmlwidget tools:rstudio
A espécie mais abundante foi Crypturellus sp. Vamos filtrar os dados somente para esse espécie:
dados_filtrados_crypt_SMART <- filtrar_dados(
dados = dados_filtrados_SMART,
nome_sps = "crypturellus"
)
head(dados_filtrados_crypt_SMART)
str(dados_filtrados_crypt_SMART)
tibble [9 × 20] (S3: tbl_df/tbl/data.frame)
$ nome_ea : logi [1:9] NA NA NA NA NA NA ...
$ n_visitas_repetidas: int [1:9] 1 1 1 1 1 1 1 1 1
$ codigo_uc : logi [1:9] NA NA NA NA NA NA ...
$ categoria_uc : Factor w/ 1 level "rds": 1 1 1 1 1 1 1 1 1
$ nome_uc : Factor w/ 1 level "rds_uatuma": 1 1 1 1 1 1 1 1 1
$ nome_uc_abv : Factor w/ 11 levels "call_vier","chir_ssat",..: 4 4 4 4 4 4 4 4 4
$ numero_ea : num [1:9] 1 1 1 1 1 1 1 1 1
$ data_amostragem : POSIXct[1:9], format: "2023-06-14" ...
$ estacao : logi [1:9] NA NA NA NA NA NA ...
$ ano : num [1:9] 2023 2023 2023 2023 2023 ...
$ esforco_dia : num [1:9] 4396 4396 4396 4396 4396 ...
$ esforco_total : num [1:9] 4396 4396 4396 4396 4396 ...
$ nome_sp : Factor w/ 11 levels "callicebus_vierai",..: 4 4 4 4 4 4 4 4 4
$ nome_sp_abv : Factor w/ 11 levels "call_vier","chir_ssat",..: 4 4 4 4 4 4 4 4 4
$ validacao : Factor w/ 2 levels "especie","genero": 2 2 2 2 2 2 2 2 2
$ distancia : num [1:9] 6.1 1.3 6 9 13 1 17 1 2
$ tamanho_grupo : num [1:9] 2 1 3 3 1 4 2 2 3
$ velocidade_km_h : num [1:9] 24381 24381 24381 24381 24381 ...
$ tempo_censo : 'difftime' num [1:9] 4.32722222222222 4.32722222222222 4.32722222222222 4.32722222222222 ...
..- attr(*, "units")= chr "hours"
$ numero_observadores: num [1:9] 4 4 4 4 4 4 4 4 4
Finalmente, vamos transformar os dados para o formato de análise:
# carregar função de transformação dos dados para o formato do pacote Distance
source(here::here("R/transformar_dados_formato_Distance.R"))
# transformar dados para o formato do pacote Distance
dados_transformados_SMART <- transformar_dados_formato_Distance(dados_filtrados_crypt_SMART)
head(dados_transformados_SMART)
dplyr::glimpse(dados_transformados_SMART)
Rows: 9
Columns: 12
$ Region.Label <fct> rds_uatuma, rds_uatuma, rds_uatu…
$ Area <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0
$ Sample.Label <lgl> NA, NA, NA, NA, NA, NA, NA, NA, …
$ Effort <dbl> 4396, 4396, 4396, 4396, 4396, 43…
$ sampling_day <dttm> 2023-06-14, 2023-06-14, 2023-06-…
$ distance <dbl> 6.1, 1.3, 6.0, 9.0, 13.0, 1.0, …
$ season <lgl> NA, NA, NA, NA, NA, NA, NA, NA, …
$ year <dbl> 2023, 2023, 2023, 2023, 2023, 20…
$ size <dbl> 2, 1, 3, 3, 1, 4, 2, 2, 3
$ cense_time <drtn> 4.327222 hours, 4.327222 hours, …
$ speed <dbl> 24381.46, 24381.46, 24381.46, 24…
$ object <int> 1, 2, 3, 4, 5, 6, 7, 8, 9